package cn.mujiankeji.mbrowser.界面.标签页.页面管理

import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateListOf
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.setValue
import cn.mujiankeji.mbrowser.app.应用路由
import cn.mujiankeji.mbrowser.数据.模型类.基本项目
import cn.mujiankeji.mbrowser.数据.配置项.应用配置
import cn.mujiankeji.mbrowser.界面.框架.主视图.标签页状态
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.withContext
import org.jsoup.Jsoup
import java.io.File
import java.text.SimpleDateFormat
import java.util.Date
import java.util.Locale

class 页面管理标签状态() : 标签页状态() {

    var coroutine : CoroutineScope ?= null
    var 历史页面列表 = mutableStateListOf<基本项目>()

    init {
        super.标题.value = "页面管理"
        super.地址.value = "mbrowser://pages"
    }

    suspend fun 加载(){
        val dir = 应用配置.路径_离线页面
        历史页面列表.clear()
        
        withContext(Dispatchers.IO) {
            val 目录 = File(dir)
            if (目录.exists() && 目录.isDirectory) {
                目录.listFiles()?.filter { it.isFile && it.name.endsWith(".html") }?.forEach { 文件 ->
                    try {
                        // 解析HTML文件获取标题
                        val 内容 = 文件.readText()
                        val 文档 = Jsoup.parse(内容)
                        val 标题 = 文档.title().takeIf { it.isNotEmpty() } ?: 文件.nameWithoutExtension
                        
                        // 创建文件日期作为副标题
                        val 时间格式 = SimpleDateFormat("yyyy-MM-dd HH:mm", Locale.getDefault())
                        val 修改时间 = 时间格式.format(Date(文件.lastModified()))
                        
                        // 文件路径作为地址
                        val 地址 = 文件.absolutePath
                        
                        历史页面列表.add(基本项目(
                            标题 = 标题,
                            副标题 = "修改时间: $修改时间",
                            地址 = "file://$地址"
                        ))
                    } catch (e: Exception) {
                        // 如果解析失败，使用文件名作为标题
                        历史页面列表.add(基本项目(
                            标题 = 文件.nameWithoutExtension,
                            副标题 = "文件",
                            地址 = "file://${文件.absolutePath}"
                        ))
                    }
                }
            }
        }
    }

    fun 点击项目(item : 基本项目){
        应用路由.加载(item.地址)
    }
    
    suspend fun 重命名页面(旧文件路径: String, 新名称: String): Boolean {
        return withContext(Dispatchers.IO) {
            try {
                val 文件 = File(旧文件路径.removePrefix("file://"))
                if (文件.exists()) {
                    val 新文件 = File(文件.parent, "$新名称.html")
                    // 检查新文件名是否已存在
                    if (新文件.exists()) {
                        return@withContext false
                    }
                    val 成功 = 文件.renameTo(新文件)
                    if (成功) {
                        加载() // 重新加载列表
                    }
                    return@withContext 成功
                }
                return@withContext false
            } catch (e: Exception) {
                return@withContext false
            }
        }
    }
    
    suspend fun 删除页面(文件路径: String): Boolean {
        return withContext(Dispatchers.IO) {
            try {
                val 文件 = File(文件路径.removePrefix("file://"))
                val 成功 = 文件.delete()
                if (成功) {
                    加载() // 重新加载列表
                }
                return@withContext 成功
            } catch (e: Exception) {
                return@withContext false
            }
        }
    }
}